package main

import (
    "io"
    "log"
    "net"
    "time"
)

// 同步版的 clock 服务
// 每隔 1 秒将当前时间 发送给客户端
// 这里有几个问题需要思考
// 1    第二个 client 挂起的时候，连接是否已经建立???
//      应该是没有建立起来的 (循环没有继续执行)
// 2    改为并发之后，某一个 client 退出之后，为其服务的 goroutine 是不是会自己退出？？
//      猜应该是不会，会泄漏

func main() {
    listener, err := net.Listen("tcp", "127.0.0.1:8000")
    if err != nil {
        log.Fatal(err)
    }

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Print(err)
            continue
        }
        // 这里不阻塞
        go handlerConn(conn)
    }
}

func handlerConn(c net.Conn) {
    defer c.Close()
    for {
        _, err := io.WriteString(c, time.Now().Format("15:04:05\n"))
        if err != nil {
            return
        }
        time.Sleep(1 * time.Second)
    }
}